﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LibOfdDataExtractionParam
{
    /// <summary>
    /// 客户端与服务端web api接口定义
    /// </summary>

    /*******************客户端发送数据***************************/

    public class OfdExtractionInput
    {
        //客户端数据，服务端会将此数据原样返回
        public string ClientData { get; set; }

        public List<OfdExtractionFileInput> ListOfdFileInput { get; set; } = new List<OfdExtractionFileInput>();
    }


    public class OfdExtractionFileInput
    {
        public string OfdFileID { get; set; }       //文件唯一标识，可以为guid。
        public string FileName { get; set; }        //文件名
        public string OfdFileDataBase64 { get; set; } //ofd文件数据

        public string OfdFileType { get; set; }         //ofd文件类型 如：增值税电子普通发票
        public string DataExtractionType { get; set; }  //提取的数据类型；如：票面信息，货物清单
    }

    /*******************服务端返回数据***************************/
    public class OfdExtractionOutput
    {
        public string ClientData { get; set; }
        public List<OfdDataExtractionInfo> ListOfdFileInfo { get; set; } = new List<OfdDataExtractionInfo>();
        public string ServerData { get; set; }  //服务端返回的其它数据
    }

    public class OfdDataExtractionInfo
    {
        public bool OK { get; set; }            //打印是否成功
        public string Message { get; set; }     //提示信息

        public string OfdFileID { get; set; }   //文件id
        public string FileName { get; set; }    //文件名称

        public string DataExtraction { get; set; }    //提取的数据信息，json格式，具体定义与提取的数据类型有关。
    }

    ////////////////提取的发票数据//////////////////////////
    public class InvoiceData
    {
        public string InvoiceCode { get; set; } //发票代码
        public string InvoiceNo { get; set; }   //发票号码
        public string TypeCode { get; set; }    //开票类型 0-正数发票 1-负数发票
        public string MachineNo { get; set; }   //机器编号 
        public string IssueDate { get; set; }   //开票日期
        public string TaxControlCode { get; set; }      //发票密文 
        public string InvoiceCheckCode { get; set; }    //发票校验码
        public string GraphCode { get; set; }           //二维码
        public string InvoiceSIA1 { get; set; }         //发票特殊标识区域 1 
        public string InvoiceSIA2 { get; set; }         //发票特殊标识区域 2

        public string Payee { get; set; }           //收款人
        public string Checker { get; set; }         //复核
        public string InvoiceClerk { get; set; }    //开票人
        public string TaxInclusiveTotalAmount { get; set; }   //价税合计

        public string TaxExclusiveTotalAmount { get; set; }  //合计金额
        public string TaxTotalAmount { get; set; }          //合计税额
        public string Note { get; set; }                    //备注

        public InvoiceSeller Seller { get; set; }          //销售方
        public InvoiceBuyer Buyer { get; set; }             //购买方
        public List<InvoiceGoodsInfo> GoodsInfos { get; set; }     //发票明细


    }

    public class InvoiceSeller
    {
        public string SellerTaxID { get; set; }         //销售方纳税人识别号
        public string SellerName { get; set; }          //销售方名称
        public string SellerAddrTel { get; set; }       //销售方地址、电话 
        public string SellerFinancialAccount { get; set; }   //销售方银行账号 
    }

    public class InvoiceBuyer
    {
        public string BuyerTaxID { get; set; }         //购买方纳税人识别号
        public string BuyerName { get; set; }          //购买方名称
        public string BuyerAddrTel { get; set; }       //购买方地址、电话
        public string BuyerFinancialAccount { get; set; }   //购买方银行账号 
    }

    public class InvoiceGoodsInfo
    {
        public string Item { get; set; }            //项目名称 
        public string Specification { get; set; }   //规格型号 
        public string MeasurementDimension { get; set; } //单位 
        public string Quantity { get; set; }            //数量 
        public string Price { get; set; }               //单价  不含税
        public string Amount { get; set; }              //金额   不含税金额
        public string TaxScheme { get; set; }       // 税率 
        public string TaxAmount { get; set; }       //税额 
    }
}
